// Package middleware
// @Author liuzhiyong
// @Date 2023/11/15
// @Description 授权中间件
package middleware

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"shopping/config"
	"shopping/utils/jwt_helper"
)

// AuthAdminMiddleware
// Description: 管理员授权
// param secretKey 秘钥
// return gin.HandlerFunc
func AuthAdminMiddleware(secretKey string) gin.HandlerFunc {
	return func(c *gin.Context) {

		if token := c.GetHeader("Authorization"); token != "" {
			// token 不为空

			// 校验token
			decodeClaims := jwt_helper.VerifyToken(token, config.Conf.JwtConfig.SecretKey)
			// 如果载荷不为空并且用户为管理员
			if decodeClaims != nil && decodeClaims.IsAdmin {
				// 执行后续函数
				c.Next()
				// 跳过后续的中间件
				c.Abort()
				return
			}
			// 载荷为空, 或者不是管理员
			c.JSON(http.StatusForbidden, gin.H{"error": "你没有权限访问"})
			c.Abort()
			return
		} else {
			// token 为空
			c.JSON(http.StatusUnauthorized, gin.H{"error": "你没有授权"})
		}
		c.Abort()
		return
	}
}

func AuthUserMiddleware(secretKey string) gin.HandlerFunc {
	return func(c *gin.Context) {
		if token := c.GetHeader("Authorization"); token != "" {
			// token 不为空

			// 校验token
			decodeClaims := jwt_helper.VerifyToken(token, config.Conf.JwtConfig.SecretKey)
			if decodeClaims != nil {
				c.Set("userId", decodeClaims.UserId)
				c.Next()
				c.Abort()
				return
			}
			// 载荷为空, 不是用户权限
			c.JSON(http.StatusForbidden, gin.H{"error": "你没有权限访问"})
			c.Abort()
			return
		} else {
			// token 为空
			c.JSON(http.StatusUnauthorized, gin.H{"error": "你没有授权"})
		}
		c.Abort()
		return
	}
}
